Ruby 日記 47日目: 配列とその要素の凍結
次のコードを実行するとどうなりますか
code:main.rb
begin
CONST_LIST_A.map{|id| id << 'hoge'}
rescue
end
begin
CONST_LIST_B.map{|id| id << 'hoge'}
rescue
end
begin
CONST_LIST_C.map!{|id| id << 'hoge'}
rescue
end
begin
CONST_LIST_D.push('add')
rescue
end
p CONST_LIST_A
p CONST_LIST_B
p CONST_LIST_C
p CONST_LIST_D
選択肢:
code:sh
code:sh
code:sh
code:sh
解説:
Arrayのfreezeに関する話だね〜
code:rb
begin
CONST_LIST_A.map{|id| id << 'hoge'}
rescue
end
各要素に hoge が追記されるね
code:rb
begin
CONST_LIST_B.map{|id| id << 'hoge'}
rescue
end
Arrayがfreezeされても、その中の要素はfreezeされないので、各要素に hoge が追記されるね
code:rb
begin
CONST_LIST_C.map!{|id| id << 'hoge'}
rescue
end
freezeされたArrayに対する破壊的な変更はエラーになるので、rescueされて ['001', '002', '003'] のまま。
code:rb
begin
CONST_LIST_D.push('add')
rescue
end
上と同様。freezeされたArrayに対する破壊的な変更はエラーになるので、rescueされて ['001', '002', '003'] のまま。
なので正解は4番目。
code:sh
# ruby gold/ex47/main.rb